"""
会员服务(继承基础服务): 里面有3个接口
将服务名固定: MemberService 以便于未来随时修改
"""
import json

from api.base_service import BaseService


class MemberServiceAPI(BaseService):

    def __init__(self):
        # 重写-覆盖式重写(子类丢弃了父类的代码实现, 只用自己的代码)  扩展式重写(既需要调用父类代码, 自己又扩展了代码)
        # 调用父类同名方法(我们需要父类的client属性, 因此必须确保父类代码执行)
        super().__init__()
        # 增加实例属性, 记录服务名
        self.member_service = "MemberService"

    # 根据手机号查询会员信息
    def find_by_telephone(self, tel):
        resp = self.client.invoke(self.member_service, "findByTelephone", tel)
        # 数据类型错误:"Failed"  没有查到:"null"   成功是:"{}"
        # 增加if判断, 如果是Failed或者null, 返回None. 如果不是前面2个,就转换成Python字典数据
        # loads: 专门加载字符串样式的JSON数据
        # 我们重点关注请求成功, 请求失败就不区分了
        if resp == "Failed" or resp == "null":
            return None
        else:
            return json.loads(resp)

    # 根据日期统计会员数
    def find_member_count_by_months(self, list_data):
        resp = self.client.invoke(self.member_service, "findMemberCountByMonths", list_data)
        # 成功(["2021.6"]) "[]"  失败([2021.6])"Failed"  失败(2021.6)"No"
        if resp == "Failed" or resp == "No":
            return None
        else:
            return json.loads(resp)

    # 添加会员
    def add(self, dict_data):
        # 在内部追加class的键值
        dict_data["class"] = "com.itheima.pojo.Member"
        resp = self.client.invoke(self.member_service, "add", dict_data)
        # 如果是成功: "null" 手机号存在: "Failed"  没有必填参数class/phone: "No"
        if resp == "null":
            return True  # add没有返回值的,要么成功,要么失败. 为了方便判断, 可以使用bool值返回
        else:
            return False


if __name__ == '__main__':
    # 创建会员服务实例对象
    ms = MemberServiceAPI()

    # 测试-根据手机号查询会员信息
    resp = ms.find_by_telephone("13020210001")
    print("响应信息:", resp)
    print("响应类型:", type(resp))

    print("*" * 50)

    # 测试-根据日期统计会员数
    resp = ms.find_member_count_by_months(["2021.6"])
    print("响应信息:", resp)
    print("响应类型:", type(resp))

    print("*" * 50)

    # 测试-添加会员
    dict_data = {"id": 123414, "name": "惠主播", "phoneNumber": "19120210302"}
    resp = ms.add(dict_data)
    print("响应信息:", resp)
    print("响应类型:", type(resp))
